package com.relife.common.quartz;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

public class CronTriggeManager {

	private static Map<String, CronTriggerMis> cronMap = new HashMap<String, CronTriggerMis>();

	private static Scheduler sche = null;

	/**
	 * 
	 * @author WU
	 * @date 2017年4月19日 下午3:28:29
	 * @param cron
	 */
	public static void cronTrigge(CronTriggerMis cron) {
		if (cronMap.containsKey(cron.getCronKey())) {
			QuartzMis.removeJob(getScheduler(), cronMap.get(cron.getCronKey()).getName());
		}
		cronMap.put(cron.getCronKey(), cron);
		QuartzMis.addJob(getScheduler(), cron);
	}

	/**
	 * 
	 * @author WU
	 * @date 2017年4月19日 下午4:20:15
	 */
	public static void clearCronTrigge() {
		for (CronTriggerMis cron : cronMap.values()) {
			QuartzMis.removeJob(getScheduler(), cron.getName());
		}
		cronMap.clear();
	}

	public static void initCronTrigge(List<CronTriggerMis> list) {
		if (list != null && list.size() > 0) {
			for (int i = 0; i < list.size(); i++) {
				QuartzMis.addJob(getScheduler(), list.get(i));
				cronMap.put(list.get(i).getCronKey(), list.get(i));
			}
		}
	}

	/**
	 * 
	 * @author WU
	 * @date 2017年4月19日 下午3:27:53
	 * @param cron
	 */
	public static void delCronTrigge(CronTriggerMis cron) {
		if (cronMap.containsKey(cron.getCronKey())) {
			cronMap.remove(cron.getCronKey());
			QuartzMis.removeJob(getScheduler(), cron.getName());
		}
	}

	public static void shutdownScheduler() {
		if (sche != null) {
			try {
				sche.shutdown();
			} catch (SchedulerException e) {
				e.printStackTrace();
			}
		}
	}

	/***
	 * 
	 * @author WU
	 * @date 2017年4月19日 下午4:34:52
	 * @return
	 */
	private static Scheduler getScheduler() {
		if (sche == null) {
			SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
			try {
				sche = gSchedulerFactory.getScheduler();
			} catch (SchedulerException e) {
				e.printStackTrace();
			}
		}
		return sche;
	}
}
